Ansible-এ ফাইল এবং ডিরেক্টরি ম্যানেজমেন্ট হলো একটি সাধারণ কাজ, যেখানে ফাইল এবং ডিরেক্টরি তৈরি করা, পরিবর্তন করা, কপি করা, মুছে ফেলা, এবং অনুমতি সেট করার জন্য বিভিন্ন মডিউল ব্যবহার করা হয়। Ansible এই ধরনের টাস্ক অটোমেট করতে সহায়ক মডিউল সরবরাহ করে, যেমন: file, copy, template, এবং synchronize। নিচে এই মডিউলগুলোর বিবরণ এবং উদাহরণ দেয়া হলো।
১. file মডিউল
file মডিউল ব্যবহার করে ফাইল এবং ডিরেক্টরি তৈরি, পরিবর্তন, বা মুছে ফেলা যায়। এটি ফাইল এবং ডিরেক্টরির অনুমতি (permission), মালিকানা (ownership), এবং লিঙ্ক (symbolic/soft link) তৈরি করতে ব্যবহৃত হয়।
file মডিউলের সাধারণ সিনট্যাক্স:
- name: Example task using file module
file:
path: /path/to/file_or_directory
state: present/absent/directory/touch/link/hard
owner: username
group: groupname
mode: '0755'
উদাহরণ:
- ডিরেক্টরি তৈরি করা:
- name: Create a directory
file:
path: /var/www/html
state: directory
mode: '0755'
owner: apache
group: apache
- ফাইল মুছে ফেলা:
- name: Remove a file
file:
path: /var/www/html/oldfile.txt
state: absent
- সিম্বলিক লিঙ্ক তৈরি করা:
- name: Create a symbolic link
file:
src: /var/www/html
dest: /var/www/current
state: link
২. copy মডিউল
copy মডিউল ব্যবহার করে লোকাল সিস্টেম থেকে রিমোট সিস্টেমে ফাইল কপি করা যায়। এটি সাধারণত স্ট্যাটিক কনফিগারেশন ফাইল কপি করতে ব্যবহৃত হয়।
copy মডিউলের সাধারণ সিনট্যাক্স:
- name: Copy a file
copy:
src: /path/to/local_file
dest: /path/to/remote_file
owner: username
group: groupname
mode: '0644'
উদাহরণ:
- name: Copy a configuration file
copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
৩. template মডিউল
template মডিউল ব্যবহার করে Jinja2 টেম্পলেট ফাইল থেকে ডায়নামিক কনফিগারেশন ফাইল তৈরি এবং কপি করা যায়। এটি copy মডিউলের মতো, তবে ডায়নামিক ডেটা ও ভ্যারিয়েবল ব্যবহারের মাধ্যমে কনফিগারেশন তৈরি করে।
উদাহরণ:
- name: Deploy a configuration file using template
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
৪. synchronize মডিউল
rsync এর মতো synchronize মডিউল ব্যবহার করে লোকাল এবং রিমোট সিস্টেমের মধ্যে ফাইল এবং ডিরেক্টরির মধ্যে সিঙ্ক্রোনাইজ করা যায়। এটি বড় ডিরেক্টরি বা ডেটা স্থানান্তরের জন্য কার্যকর।
synchronize মডিউলের সাধারণ সিনট্যাক্স:
- name: Synchronize directories
synchronize:
src: /local/path
dest: /remote/path
delete: yes
উদাহরণ:
- name: Synchronize website files
synchronize:
src: /var/www/html/
dest: /backup/html/
delete: yes
৫. fetch মডিউল
fetch মডিউল রিমোট সিস্টেম থেকে লোকাল সিস্টেমে ফাইল নিয়ে আসে। এটি লোগ বা কনফিগারেশন ফাইল কপি করার জন্য কার্যকর।
উদাহরণ:
- name: Fetch a log file from remote host
fetch:
src: /var/log/nginx/access.log
dest: /tmp/nginx_logs/
flat: yes
৬. unarchive মডিউল
unarchive মডিউল রিমোট সিস্টেমে আর্কাইভ ফাইল (যেমন: .zip, .tar.gz) আনজিপ বা আনআর্কাইভ করতে ব্যবহৃত হয়।
উদাহরণ:
- name: Unarchive a tar file
unarchive:
src: /path/to/archive.tar.gz
dest: /var/www/html/
remote_src: yes
সারাংশ
Ansible-এ ফাইল এবং ডিরেক্টরি ম্যানেজমেন্টের জন্য বিভিন্ন মডিউল ব্যবহার করা যায়:
file: ফাইল বা ডিরেক্টরি তৈরি, মুছে ফেলা, বা মালিকানা ও পারমিশন সেট করা।copy: লোকাল সিস্টেম থেকে রিমোটে ফাইল কপি করা।template: Jinja2 টেম্পলেট ব্যবহার করে ডায়নামিক কনফিগারেশন তৈরি করা।synchronize: লোকাল এবং রিমোট সিস্টেমের মধ্যে ডিরেক্টরি সিঙ্ক্রোনাইজ করা।fetch: রিমোট থেকে লোকাল সিস্টেমে ফাইল কপি করা।unarchive: রিমোট সিস্টেমে আর্কাইভ ফাইল আনআর্কাইভ করা।
এই মডিউলগুলোর মাধ্যমে, আপনি সহজেই আপনার ইনফ্রাস্ট্রাকচার এবং সার্ভারের ফাইল ম্যানেজমেন্ট অটোমেট করতে পারবেন। Ansible-এর ফাইল এবং ডিরেক্টরি ম্যানেজমেন্ট মডিউলগুলি ব্যবহার করে প্লেবুক তৈরি করা সহজ এবং কার্যকর হয়।
Ansible এ copy মডিউল ব্যবহার করে আপনি লোকাল মেশিন (যেখান থেকে প্লেবুক রান করা হচ্ছে) থেকে একটি ফাইল বা ডিরেক্টরি রিমোট হোস্টে কপি করতে পারেন। এটি একটি সাধারণ এবং সহজ মডিউল যা ফাইল কনফিগারেশন, স্ক্রিপ্ট ডিপ্লয়মেন্ট, বা নির্দিষ্ট টেমপ্লেট কপি করার জন্য ব্যবহৃত হয়।
copy মডিউলের সাধারণ ব্যবহার
copy মডিউল ব্যবহার করার জন্য, আপনি src এবং dest নামের দুটি প্যারামিটার ব্যবহার করেন:
- src: সোর্স ফাইল বা ডিরেক্টরি যা লোকাল মেশিন থেকে কপি করা হবে।
- dest: ডেস্টিনেশন পাথ যেখানে রিমোট হোস্টে ফাইল বা ডিরেক্টরি কপি করা হবে।
copy মডিউলের উদাহরণ
---
- name: Copy a file to remote hosts
hosts: all
become: yes
tasks:
- name: Copy the Apache config file
copy:
src: /local/path/to/apache.conf
dest: /etc/apache2/apache2.conf
owner: root
group: root
mode: '0644'
উপরের প্লেবুকে copy মডিউল ব্যবহার করা হয়েছে /local/path/to/apache.conf ফাইলটি /etc/apache2/apache2.conf পাথে রিমোট হোস্টে কপি করার জন্য। এখানে:
- src: সোর্স ফাইল যা লোকাল মেশিন থেকে কপি করা হবে।
- dest: ডেস্টিনেশন পাথ যেখানে ফাইলটি রিমোট হোস্টে কপি হবে।
- owner: ফাইলের মালিকানা সেট করা হয়েছে
root। - group: ফাইলের গ্রুপ সেট করা হয়েছে
root। - mode: ফাইল পারমিশন সেট করা হয়েছে
'0644'।
copy মডিউলের অন্যান্য গুরুত্বপূর্ণ প্যারামিটার
- backup: যদি
yesকরা হয়, তাহলে Ansible ডেস্টিনেশন ফাইলের একটি ব্যাকআপ কপি রাখবে যদি ফাইলটি আগে থেকেই থাকে। উদাহরণ:
copy:
src: /path/to/file
dest: /destination/path
backup: yes
- force: ডিফল্টভাবে
yes, যার মানে Ansible সোর্স ফাইলের সাথে মিলিয়ে ডেস্টিনেশন ফাইল পরিবর্তন করবে। যদি আপনি ফোর্স করা বন্ধ করতে চান, তাহলেforce: noব্যবহার করতে পারেন। - remote_src: যদি আপনি রিমোট হোস্টের একটি ফাইল অন্য পাথে কপি করতে চান, তাহলে
remote_src: yesব্যবহার করতে হবে।
copy:
src: /path/on/remote/host/file.txt
dest: /another/path/on/remote/host/file.txt
remote_src: yes
উদাহরণ ১: ফোল্ডার কপি করা
- name: Copy a directory recursively
copy:
src: /local/path/to/directory/
dest: /remote/path/to/directory/
mode: '0755'
এখানে src ফোল্ডারটি dest ফোল্ডারে কপি করা হবে রিমোট হোস্টে। এটি রিকার্সিভলি (অর্থাৎ সাব-ডিরেক্টরি এবং ফাইল সহ) কপি করা হবে।
উদাহরণ ২: ব্যাকআপ সহ ফাইল কপি করা
- name: Backup and copy a file
copy:
src: /path/to/file.txt
dest: /etc/config/file.txt
backup: yes
এখানে, ফাইলটি কপি করার আগে যদি /etc/config/file.txt ফাইলটি থাকে, তাহলে তার একটি ব্যাকআপ তৈরি করা হবে।
সংক্ষেপে
Ansible এ copy মডিউলটি একটি সহজ কিন্তু শক্তিশালী টুল যা লোকার ফাইল বা ডিরেক্টরি রিমোট হোস্টে কপি করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন প্যারামিটার এবং অপশন সহ ব্যবহার করা যায়, যেমন: মালিকানা, পারমিশন, ব্যাকআপ এবং রিমোট সোর্স কপি। এই মডিউল ব্যবহার করে আপনি সহজেই আপনার কনফিগারেশন ফাইল, স্ক্রিপ্ট বা অন্যান্য টেমপ্লেট ফাইল ডিপ্লয় করতে পারেন।
Ansible এর file মডিউল ব্যবহার করে আপনি ফাইল এবং ডিরেক্টরি তৈরি, মুছা, পারমিশন সেট করা এবং লিঙ্ক তৈরি করার মতো কাজ করতে পারেন। এই মডিউলটি অত্যন্ত ফ্লেক্সিবল এবং এটি বিভিন্ন ফাইল বা ডিরেক্টরি সম্পর্কিত কাজ সম্পাদনের জন্য ব্যবহৃত হয়।
file মডিউলের মূল ব্যবহার
file মডিউলটি সাধারণত নিচের কাজগুলো করার জন্য ব্যবহৃত হয়:
- ফাইল বা ডিরেক্টরি তৈরি করা।
- ফাইল বা ডিরেক্টরি মুছে ফেলা।
- পারমিশন, মালিকানা, এবং গ্রুপ সেট করা।
- সিম্বলিক বা হার্ড লিঙ্ক তৈরি করা।
file মডিউলের সাধারণ সিনট্যাক্স
- name: File or directory management
ansible.builtin.file:
path: /path/to/file_or_directory
state: touch / directory / absent / link / hard
owner: username
group: groupname
mode: permissions
উদাহরণ: ফাইল এবং ডিরেক্টরি তৈরি করা
১. ফাইল তৈরি করা
---
- name: Create an empty file
hosts: localhost
tasks:
- name: Create a file named example.txt
ansible.builtin.file:
path: /tmp/example.txt
state: touch
owner: ubuntu
group: ubuntu
mode: '0644'
ব্যাখ্যা:
- path: ফাইলটির পূর্ণ পাথ উল্লেখ করা হয়েছে (এক্ষেত্রে
/tmp/example.txt)। - state: touch: এটি একটি খালি ফাইল তৈরি করবে। যদি ফাইলটি আগে থেকে থাকে, তাহলে এটি কিছু করবে না।
- owner এবং group: ফাইলের মালিক এবং গ্রুপ নির্ধারণ করা হয়েছে।
- mode: ফাইলের পারমিশন সেট করা হয়েছে (এক্ষেত্রে
'0644')।
২. ডিরেক্টরি তৈরি করা
---
- name: Create a directory
hosts: localhost
tasks:
- name: Create a directory named /tmp/mydirectory
ansible.builtin.file:
path: /tmp/mydirectory
state: directory
owner: ubuntu
group: ubuntu
mode: '0755'
ব্যাখ্যা:
- state: directory: এটি একটি ডিরেক্টরি তৈরি করবে। যদি ডিরেক্টরিটি আগে থেকে থাকে, তাহলে এটি কিছু করবে না।
- মালিকানা এবং পারমিশনও এখানে নির্ধারণ করা হয়েছে।
৩. ফাইল বা ডিরেক্টরি মুছে ফেলা
---
- name: Remove a file or directory
hosts: localhost
tasks:
- name: Remove example.txt file
ansible.builtin.file:
path: /tmp/example.txt
state: absent
- name: Remove /tmp/mydirectory directory
ansible.builtin.file:
path: /tmp/mydirectory
state: absent
ব্যাখ্যা:
- state: absent: এটি ফাইল বা ডিরেক্টরি মুছে ফেলবে। যদি ফাইল বা ডিরেক্টরি আগে থেকে না থাকে, তাহলে এটি কিছু করবে না।
৪. সিম্বলিক লিঙ্ক তৈরি করা
---
- name: Create a symbolic link
hosts: localhost
tasks:
- name: Create a symlink from /tmp/symlink.txt to /tmp/example.txt
ansible.builtin.file:
src: /tmp/example.txt
path: /tmp/symlink.txt
state: link
ব্যাখ্যা:
- src: লিঙ্কের উৎস ফাইল বা ডিরেক্টরি।
- path: যেখানে লিঙ্কটি তৈরি করা হবে।
- state: link: এটি একটি সিম্বলিক লিঙ্ক তৈরি করবে।
৫. ফাইল বা ডিরেক্টরির মালিকানা এবং পারমিশন পরিবর্তন করা
---
- name: Change ownership and permissions
hosts: localhost
tasks:
- name: Change ownership and permissions of /tmp/example.txt
ansible.builtin.file:
path: /tmp/example.txt
owner: ubuntu
group: ubuntu
mode: '0644'
ব্যাখ্যা:
- owner এবং group: ফাইল বা ডিরেক্টরির মালিক এবং গ্রুপ পরিবর্তন করবে।
- mode: পারমিশন সেট করবে।
file মডিউলের বিভিন্ন স্টেট অপশন
| স্টেট | বর্ণনা |
|---|---|
touch | একটি খালি ফাইল তৈরি করবে বা ফাইলের টাইমস্ট্যাম্প আপডেট করবে। |
directory | একটি নতুন ডিরেক্টরি তৈরি করবে। |
absent | ফাইল বা ডিরেক্টরি মুছে ফেলবে। |
link | একটি সিম্বলিক লিঙ্ক তৈরি করবে। |
hard | একটি হার্ড লিঙ্ক তৈরি করবে। |
সংক্ষেপে
Ansible এর file মডিউলটি ফাইল এবং ডিরেক্টরি ম্যানেজমেন্টের জন্য একটি শক্তিশালী এবং ফ্লেক্সিবল উপায় প্রদান করে। এর মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি তৈরি, মুছা, পারমিশন ও মালিকানা সেট করতে পারেন। এটি আপনার প্লেবুককে আরও কার্যকর এবং কাস্টমাইজড করে তুলতে সাহায্য করে।
Ansible এ আর্কাইভ (Archive) এবং আনআর্কাইভ (Unarchive) মডিউলগুলো ফাইল বা ডিরেক্টরির সংরক্ষণ এবং পুনরুদ্ধার করার জন্য ব্যবহৃত হয়। এই মডিউলগুলো ব্যবহার করে আপনি সহজেই ফাইল এবং ডিরেক্টরি সংরক্ষণ করতে, সেগুলো আনপ্যাক করতে বা অন্যান্য সার্ভারে এক্সট্র্যাক্ট করতে পারেন। চলুন, প্রতিটি মডিউল সম্পর্কে বিস্তারিত আলোচনা করা যাক।
১. আর্কাইভ মডিউল (Archive Module)
আর্কাইভ মডিউল একটি নির্দিষ্ট ফাইল বা ডিরেক্টরিকে আর্কাইভ ফাইলে (যেমন: .tar, .zip) প্যাক করতে ব্যবহৃত হয়। এটি বিশেষ করে তখন কার্যকরী, যখন আপনি একটি ডিরেক্টরি বা ফাইলের ব্যাকআপ নিতে চান বা একটি কম্প্রেসড ফাইল তৈরি করতে চান।
উদাহরণ: আর্কাইভ মডিউল ব্যবহার
---
- name: Archive files and directories
hosts: localhost
tasks:
- name: Create a tar.gz archive of /var/www/html
ansible.builtin.archive:
path: /var/www/html
dest: /tmp/html_backup.tar.gz
format: gz
ব্যাখ্যা:
- path: যে ফাইল বা ডিরেক্টরি আর্কাইভ করতে চান, তার পাথ।
- dest: আর্কাইভ ফাইল তৈরি হওয়ার পাথ এবং ফাইলের নাম।
- format: আর্কাইভ ফাইলের ফরম্যাট নির্ধারণ করতে
gz,bz2,xz, বাzipব্যবহার করা যায়।
archive মডিউলের গুরুত্বপূর্ণ প্যারামিটার
- path: আর্কাইভ করার জন্য উৎস ফাইল বা ডিরেক্টরি।
- dest: আর্কাইভ ফাইল সংরক্ষণের স্থান এবং নাম।
- format: আর্কাইভের ফরম্যাট (gz, bz2, xz, zip)।
- remove: যদি
trueসেট করা হয়, তাহলে আর্কাইভ তৈরি করার পর উৎস ফাইল বা ডিরেক্টরি মুছে ফেলা হবে।
উদাহরণ: remove প্যারামিটার ব্যবহার করা
- name: Archive and remove the original directory
hosts: localhost
tasks:
- name: Create a compressed archive and remove source
ansible.builtin.archive:
path: /var/log/myapp
dest: /tmp/myapp_logs.tar.gz
format: gz
remove: true
ব্যাখ্যা: আর্কাইভ ফাইল তৈরির পর /var/log/myapp ডিরেক্টরিটি মুছে ফেলা হবে।
২. আনআর্কাইভ মডিউল (Unarchive Module)
আনআর্কাইভ মডিউল আর্কাইভ ফাইল (যেমন .tar.gz, .zip) আনপ্যাক করতে ব্যবহৃত হয়। এটি বিশেষ করে ডিপ্লয়মেন্ট বা কোনো ফাইলের কনটেন্ট এক্সট্র্যাক্ট করতে উপযোগী।
উদাহরণ: আনআর্কাইভ মডিউল ব্যবহার
---
- name: Unarchive a file
hosts: localhost
tasks:
- name: Extract the html_backup.tar.gz archive
ansible.builtin.unarchive:
src: /tmp/html_backup.tar.gz
dest: /var/www/html
remote_src: yes
ব্যাখ্যা:
- src: আর্কাইভ ফাইলের উৎস পাথ।
- dest: আর্কাইভ ফাইলটি এক্সট্র্যাক্ট করার গন্তব্যস্থল।
- remote_src: যদি
yesসেট করা হয়, তাহলে এটি মনে করবে যে আর্কাইভ ফাইলটি রিমোট হোস্টে অবস্থিত।
আনআর্কাইভ মডিউলের গুরুত্বপূর্ণ প্যারামিটার
- src: উৎস আর্কাইভ ফাইল যা আনপ্যাক করতে হবে।
- dest: এক্সট্র্যাক্ট করা ফাইলের গন্তব্যস্থান।
- remote_src: আর্কাইভ ফাইলটি রিমোট হোস্টে অবস্থিত কিনা তা নির্দেশ করে (yes/no)।
- creates: যদি উল্লেখিত ফাইল বা ডিরেক্টরি আগে থেকেই থাকে, তাহলে আনআর্কাইভ মডিউল আর এক্সট্র্যাক্ট করবে না। এটি ইডেম্পোটেন্সি নিশ্চিত করতে ব্যবহার করা হয়।
উদাহরণ: creates প্যারামিটার ব্যবহার করা
- name: Unarchive only if directory does not exist
hosts: localhost
tasks:
- name: Extract the archive if not already extracted
ansible.builtin.unarchive:
src: /tmp/html_backup.tar.gz
dest: /var/www/html
remote_src: yes
creates: /var/www/html/index.html
ব্যাখ্যা: যদি /var/www/html/index.html ফাইলটি আগে থেকেই থাকে, তাহলে আনআর্কাইভ মডিউল কিছু করবে না।
আর্কাইভ এবং আনআর্কাইভ একত্রে ব্যবহার
একই প্লেবুকে আর্কাইভ এবং আনআর্কাইভ মডিউল ব্যবহার করে আপনি ফাইলের ব্যাকআপ নিতে এবং তা পুনরুদ্ধার করতে পারেন:
---
- name: Backup and restore example
hosts: localhost
tasks:
- name: Archive the application logs
ansible.builtin.archive:
path: /var/log/myapp
dest: /tmp/myapp_logs_backup.tar.gz
format: gz
- name: Unarchive the logs to backup directory
ansible.builtin.unarchive:
src: /tmp/myapp_logs_backup.tar.gz
dest: /backup/logs
remote_src: yes
সংক্ষেপে
| মডিউল | বর্ণনা |
|---|---|
| archive | একটি ফাইল বা ডিরেক্টরিকে আর্কাইভ ফাইলে প্যাক করে। |
| unarchive | আর্কাইভ ফাইল আনপ্যাক করে এবং গন্তব্যস্থলে এক্সট্র্যাক্ট করে। |
Ansible এর archive এবং unarchive মডিউল ব্যবহার করে সহজেই ফাইল বা ডিরেক্টরি সংরক্ষণ ও পুনরুদ্ধার করতে পারবেন। এটি বিশেষ করে ব্যাকআপ এবং ডিপ্লয়মেন্টের জন্য খুবই কার্যকর।
Read more